const Validator = require('validator');

class timerV{
    constructor(data) {
        this.data = data;
        this.msg = '';
    }

    //验证
    set_check(){
        if(Validator.isEmpty(this.data.create_time)){
            this.msg = '请求时间不能为空';
            return false;
        }
        let reg = /^(\d{1,4})\-([1-9]|[1][1-2]|0[1-9])\-([1-9]|[1-2][0-9]|[3][0-1]|0[1-9])\s(\d{1,2}):(\d{1,2}):(\d{1,2})$/;
        if(!reg.test(this.data.create_time)){
            this.msg = '请求时间格式不正确(YYYY-mm-dd HH:mm:ss)';
            return false;
        }
        if(Validator.isEmpty(this.data.notify_url)){
            this.msg = '回调地址不能为空';
            return false;
        }
        if(!Validator.isURL(this.data.notify_url)){
            this.msg = '回调地址格式不正确';
            return false;
        }
        if(Validator.isEmpty(this.data.type)){
            this.msg = '请求类型不能为空';
            return false;
        }
        //1 单次 2 每天 3 每周 4 每月
        if(!Validator.isIn(this.data.type,[1,2,3,4])){
            this.msg = '请求类型参数不正确应该为[1,2,3,4]的值';
            return false;
        }
        if(Validator.isEmpty(this.data.trigger_time)){
            this.msg = '触发时间不能为空';
            return false;
        }
        /**
         * 6个占位符从左到右分别代表：秒、分、时、日、月、周几
         * '*'表示通配符，匹配任意，当秒是'*'时，表示任意秒数都触发，其它类推
         *      *  *  *  *  *  *
         *      ┬ ┬ ┬ ┬ ┬ ┬
         *      │ │ │ │ │  |
         *      │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
         *      │ │ │ │ └───── month (1 - 12)
         *      │ │ │ └────────── day of month (1 - 31)
         *      │ │ └─────────────── hour (0 - 23)
         *      │ └──────────────────── minute (0 - 59)
         *      └───────────────────────── second (0 - 59, OPTIONAL)
         * 
         * 每分钟的第30秒触发： '30 * * * * *'
         * 每小时的1分30秒触发 ：'30 1 * * * *'
         * 每天的凌晨1点1分30秒触发 ：'30 1 1 * * *'
         * 每月的1日1点1分30秒触发 ：'30 1 1 1 * *'
         * 2016年的1月1日1点1分30秒触发 ：'30 1 1 1 2016 *'
         * 每周1的1点1分30秒触发 ：'30 1 1 * * 1'
         */
        if(this.data.type != 1){
            let reg = /^([1-9]|[1-5][0-9]|\*)\s([1-9]|[1-5][0-9]|\*)\s([1-9]|[1][0-9]|[2][0-3]|0|\*)\s([1-9]|[1-2][0-9]|[3][0-1]|31|\*)\s([1-9]|[1][1-2]|12|\*)\s([0-7]|\*)/
            if(!reg.test(this.data.trigger_time)){
                this.msg = '触发时间格式不正确,类型不是单次时格式为(*  *  *  *  *  *)';
                return false;
            }
        }else{
            //值为1的时候触发时间是单次,时间格式应该是未来时间 2021-01-01 01:00:00
            let reg = /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
            if(!reg.test(this.data.trigger_time)){
                this.msg = '触发时间格式不正确,类型为单次时格式为(YYYY-mm-dd HH:mm:ss)';
                return false;
            }
            if(!Validator.isAfter(this.data.trigger_time)){
                this.msg = '未来时间不能小于当前时间';
                return false;
            }
        }
        if(Validator.isEmpty(this.data.data)){
            this.msg = '请求数据不能为空';
            return false;
        }
        if(Validator.isEmpty(this.data.sign)){
            this.msg = '请求签名不能为空';
            return false;
        }
        return true;
    }

    cancel_check(){
        if(Validator.isEmpty(this.data.create_time)){
            this.msg = '请求时间不能为空';
            return false;
        }
        let reg = /^(\d{1,4})\-([1-9]|[1][1-2]|0[1-9])\-([1-9]|[1-2][0-9]|[3][0-1]|0[1-9])\s(\d{1,2}):(\d{1,2}):(\d{1,2})$/;
        if(!reg.test(this.data.create_time)){
            this.msg = '请求时间格式不正确(YYYY-mm-dd HH:mm:ss)';
            return false;
        }
        if(Validator.isEmpty(this.data.id)){
            this.msg = '请求ID不能为空';
            return false;
        }
        if(Validator.isEmpty(this.data.sign)){
            this.msg = '请求签名不能为空';
            return false;
        }
        return true;
    }
}

module.exports = timerV